package thread;

import lombok.extern.log4j.Log4j2;
import org.junit.jupiter.api.Test;

import java.util.concurrent.TimeUnit;

/**
 * @author : ZhuQi
 * @version : 时间:2022/8/1 16:18 版本:
 */
@Log4j2
public class JoinMethodDemo {

    /**
     * 测试内容: 测试Join方法的使用
     * 测试结果: 主线程等待子线程执行后继续执行
     */
    @Test
    public void testJoinMethod1() throws Exception {
        Thread thread = new Thread(() -> {
            log.info(Thread.currentThread().getName() + "start--");
            try {
                TimeUnit.SECONDS.sleep(3);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            log.info(Thread.currentThread().getName() + "end--");
        });
        thread.start();
        thread.join();
        System.out.println("任务执行完成");
    }

    /**
     * 测试内容: 测试join时在子线程抛出异常
     * 测试结果: 子线程正常介绍，异常结束主线程都会继续执行
     */
    @Test
    public void given_aException_when_threadJoin() {
        Thread thread = new Thread(() -> {
            log.info(Thread.currentThread().getName() + "start--");
            throw new RuntimeException("系统异常");
        });
        thread.start();
        try {
            thread.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        log.info("任务执行完成");
    }



}
